#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
日志文件清理工具
功能：自动清理超过指定天数的过期日志文件
作者：您的名字
"""

import os
import glob
import time
from datetime import datetime, timedelta

def find_log_files(directory=".", pattern="system_health_*.log"):
    """
    查找所有匹配模式的日志文件
    """
    search_pattern = os.path.join(directory, pattern)
    log_files = glob.glob(search_pattern)
    return log_files

def get_file_age_days(file_path):
    """
    获取文件的天数年龄（基于修改时间）
    """
    if not os.path.exists(file_path):
        return None
    
    # 获取文件的最后修改时间
    file_mtime = os.path.getmtime(file_path)
    file_time = datetime.fromtimestamp(file_mtime)
    
    # 计算与当前时间的差异
    current_time = datetime.now()
    age_days = (current_time - file_time).days
    
    return age_days

def cleanup_old_logs(max_days=7, dry_run=False):
    """
    清理过期日志文件的主要函数
    
    参数:
    - max_days: 保留的最大天数，超过这个天数的文件将被删除
    - dry_run: 试运行模式，只显示会删除什么，不实际删除
    """
    print("=" * 50)
    print("          日志文件清理报告")
    print("=" * 50)
    print(f"检查时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
    print(f"保留天数: {max_days}天")
    print(f"模式: {'试运行（不实际删除）' if dry_run else '实际执行'}")
    print()
    
    # 查找所有日志文件
    log_files = find_log_files()
    
    if not log_files:
        print("❌ 未找到任何日志文件")
        return
    
    print(f"找到 {len(log_files)} 个日志文件:")
    print("-" * 40)
    
    deleted_count = 0
    kept_count = 0
    
    for file_path in log_files:
        file_age = get_file_age_days(file_path)
        file_name = os.path.basename(file_path)
        
        if file_age is None:
            print(f"❓ {file_name} - 无法获取文件信息")
            continue
        
        if file_age > max_days:
            # 文件过期，需要删除
            if dry_run:
                print(f"🗑️  [待删除] {file_name} - {file_age}天前")
            else:
                try:
                    os.remove(file_path)
                    print(f"✅ [已删除] {file_name} - {file_age}天前")
                    deleted_count += 1
                except Exception as e:
                    print(f"❌ [删除失败] {file_name} - 错误: {e}")
        else:
            # 文件在保留期内
            print(f"💾 [保留] {file_name} - {file_age}天前")
            kept_count += 1
    
    print("-" * 40)
    print("清理完成!")
    if dry_run:
        print(f"📊 试运行结果: {deleted_count} 个文件将被删除, {kept_count} 个文件将保留")
    else:
        print(f"📊 实际结果: {deleted_count} 个文件已删除, {kept_count} 个文件保留")

def main():
    """
    主函数 - 提供简单的用户交互
    """
    print("日志清理工具")
    print("1. 试运行（查看哪些文件会被删除）")
    print("2. 实际执行清理")
    print("3. 自定义保留天数")
    
    choice = input("请选择操作 (1/2/3): ").strip()
    
    if choice == "1":
        # 试运行模式，默认7天
        cleanup_old_logs(max_days=7, dry_run=True)
    elif choice == "2":
        # 实际执行清理，默认7天
        confirm = input("确定要删除超过7天的日志文件吗？(y/N): ").strip().lower()
        if confirm == 'y':
            cleanup_old_logs(max_days=7, dry_run=False)
        else:
            print("操作已取消")
    elif choice == "3":
        # 自定义天数
        try:
            days = int(input("请输入要保留的天数: "))
            if days < 0:
                print("天数不能为负数")
                return
            
            confirm = input(f"确定要删除超过{days}天的日志文件吗？(y/N): ").strip().lower()
            if confirm == 'y':
                cleanup_old_logs(max_days=days, dry_run=False)
            else:
                print("操作已取消")
        except ValueError:
            print("请输入有效的数字")
    else:
        print("无效选择")

if __name__ == "__main__":
    main()
